package com.qujia.station.service;


import com.qujia.station.domain.CardBatch;
import com.qujia.station.domain.PhysicalCard;
import com.qujia.station.domain.dto.PhysicalCardListDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 实体卡 service
 * */
public interface IPhysicalCardService {

    /**
     * 查询单个实体卡
     * */
    PhysicalCard selectPhysicalCard(String physicalCardNo);

    /**
     * 查询实体卡列表
     * */
    List<PhysicalCard> selectPhysicalCardList(PhysicalCardListDto physicalCardDto);

    /**
     * 添加实体卡
     * 读卡时新增以及复制实体卡
     * */
    String addPhysicalCard(PhysicalCard physicalCard);

    /**
     * 修改实体卡
     * */
    int updatePhysicalCard(PhysicalCard physicalCard);

    /**
     * 后台复制时修改实体卡
     * */
    int updateAdminPhysicalCard(PhysicalCard physicalCard);

    /**
     * 冻结/注销实体卡
     * */
    int updatePhysicalCardStatus(PhysicalCard physicalCard);


    /**
     * 油企+手机号 校验，一个油企一个
     * */
    PhysicalCard selectByEnterpriseIdAndPhone(Long enterpriseId, String userPhone);

    /**
     * pos机、双屏机写卡
     * */
    void writePhysicalCard(PhysicalCard physicalCard);

    /**
     * 创建空卡
     * */
    void createEmptyCard(CardBatch cardBatch);

    /**
     * 返回油站所属油企下所有油站
     * */
    List<Map<String,Object>> getStationList(Long stationId);

    /**
     * 获取批次号下所有实体卡
     * */
    List<PhysicalCard> selectPhysicalCardListByBatchId(String batchId);

    /**
     * 判断实体卡是否可以写卡
     * */
    Boolean judgePhysicalCard(String physicalCardNo);

    /**
     * 获取批次号中第一张未写卡状态的实体卡
     * */
    PhysicalCard selectFirstNumByBatchId(String batchNo);

    /**
     * 查询实体卡注销列表
     * */
    List<PhysicalCard> selectWithdrawList(PhysicalCardListDto physicalCardListDto);

    /**
     * 判断是否是定额卡
     * */
    boolean physicalCardType(PhysicalCard physicalCard);

    /**
     * 根据appUserId查询绑定的实体卡
     * */
    List<PhysicalCard> selectPhysicalCardByAppUserId(Integer appUserId);
}
